package com.ebo.httpcall4j.core.inbound;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标记在Controller方法上，用于自动记录传入的HTTP请求和响应日志。
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogIncomingCall {

    /**
     * 为该调用指定一个功能名称，用于日志记录和分类。
     * <p>
     * 如果未提供，将默认使用被注解的方法名作为功能名称。
     *
     * @return 功能名称
     */
    String functionName();

    /**
     * 指定该接口所属的内部业务系统名称，例如：CRM, ERP, CSM。
     * <p>
     * 此名称用于在日志中标识和归类接口。
     *
     * @return 业务系统名称
     */
    String systemName() default "";

    /**
     * 指定一个HTTP Header的名称，用于从请求中动态获取调用方系统的标识。
     * <p>
     * 如果指定了此Header名称，并且请求中包含了对应的Header，则其值将覆盖 {@link #systemName()} 的静态配置。
     * 这对于多租户或多系统集成的场景非常有用。
     *
     * @return 用于传递系统名称的HTTP Header名称
     */
    String systemNameHeader() default "Client-System";
}